package fifth.static关键字;
/*
使用static声明的方法 有时又叫类方法 可以由类名称直接调用
 */

/**
 * 实际开发的时候 如果要要定义一个类中的方法 一般都会以非static方法（普通方法）为主
 * 而定义为static方法一般只有一种情况 ：此方法不希望通过实例化对象进行调用 则此时会有两种因素：
 * ①本类没有提供普通属性 这样产生实例化对象没有意义
 * ②本类无法直接进行对象实例化 只有利用static操作
 * 对于② 在讲抽象的时候能够深刻体会到
 *
 * 另外：非 static方法可以调用static声明的属性和方法
 *      但是static方法不能调用非static
 */

public class 使用static声明方法 {
    public static void main(String[] args) {
        Demo d1= new Demo("张三",18);
        Demo d2= new Demo("尼斯",23);
        Demo d3= new Demo("山大",43);
        System.out.println("--------- 修改之前 ---------");
        d1.info();
        d2.info();
        d3.info();
        System.out.println("--------- 修改之后 ---------");
        Demo.setCountry("B城");      //不用setter（）方法  直接使用类名称直接调用方法
        d1.info();
        d2.info();
        d3.info();

    }
}
class Demo{
    private String name;
    private int age;
    private static String country ="A城";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static String getCountry() {
        return country;
    }

    public static void setCountry(String country) {
        Demo.country = country;
    }

    public Demo(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void info(){
        System.out.println("姓名："+getName()+",年龄："+getAge()+",城市："+getCountry());
    }
}
